Linux音频问题 |
您所在的位置:网站首页 › 声卡驱动high definition audio › Linux音频问题 |
一、Linux音频简介
1、Linux音频的历史
起初,在1992年推出了OSS框架,用于在Unix操作系统中处理音频信号。直至于1998年Gravis Ultrasound所开发的ALSA驱动,ALSA此时一直作为一个单独的软件包开发,LINUX内核一直使用的OSS框架。直到2002年开始,Linux内核2.5版本引进,2.6版本成为Linux内核中默认的标准音频驱动程序集,OSS则被标记为废弃。 首先我们来了解下当前Linux音频在使用的主流音频框架,也就是ALSA。 PCM就是把声音从模拟信号(人耳能识别的信号)转换为数字信号的一种技术,它利用一个固定的频率对模拟信号进行采样,采样后对信号进行处理,并将处理后的信号数据输出或记录到存储介质中,从而产生数字音频。 AC97: 通常用于PC声卡, 为5线接口, 每个AC97帧为21uS长, 被分为13个时隙BCLK: 由AC97驱动, 为12.288 MHzSYNC: 同步信号, 由Controler驱动, 为48 kHzSDATDIN: 用于capture, AC97->ControlerSDATAOUT: 用于playback, Controler->AC97RESET: 由Controler生成, 用于唤醒AC97I2S是HiFi、STB和便携式设备中常用的4线DAI SCLK: 串行时钟LRCK: 也称WS, 声道选择线Tx: 用于传输音频数据Rx: 用于接收音频数据PCM是另一种4线接口, 与I2S非常相似, 可以支持更灵活的协议 BCLK: 位时钟, 根据采样率而变化SYNC: 同步信号Tx: 用于传输音频数据Rx: 用于接收音频数据 3、CONTROLControl接口主要让用户空间的应用程序可以访问和控制音频codec芯片中的多路开关,滑动控件等,进行音量控制、静音等。 4、MIDI是为了连接舞台上的synthesizer、键盘、道具、灯光控制器的一种串行接口 5、ASOCALSA存在的问题: Codec驱动与SOC中断CPU耦合严重,这将导致代码重复,一个Codec驱动每个cpu上会出现不同的版本。当音频事件发生时(插拔耳机,音箱)没有标准的方法通知用户,尤其在移动端此事件非常常见。当播放/录制音频时,驱动会让整个codec处于上电状态,这样会在移动端非常浪费电量。同时也不支持改变采样频率/配置电流来节约功耗。针对以上问题,提出了ASOC来力争解决上述问题。解决方法如下: Codec代码独立,不再耦合于CPU,这样可以增加Codec代码重复利用。在Codec和Soc之间通过简单的I2S/PCM音频接口通信,这样SOC和Codec只需要注册自己相关的接口到ASOC code即可。动态的电源管理(Dynamic Audio Power Management)DAPM。DAPM始终将Codec自动设置在最低功耗状态运行。消除pop音。控制各个widget上下电的顺序消除pop音。添加平台相关的控制,运行平台添加控制设备到声卡 6、MachineMachine可以理解为是一个桥梁,用于在Codec和Platform之间建立联系。此Machine指定了该机器使用那个Platform,那个Codec,最终会通过Machine建立两者之间的联系 7、Platform可以理解为某款SOC平台,平台驱动中包括音频DMA引擎驱动,数字接口驱动(I2S, AC97, PCM)以及该平台相关的任何音频DSP驱动。同样此Platform也可以重用,在不同的Machine中可以直接重复使用。 8、CodecCodec即编解码芯片的驱动,此Codec驱动是和平台无关,包含的功能有: 音频的控制接口,音频读写IO接口,以及DAPM的定义等 三、Linux音频之HDAHDA(High Definition Audio,高清晰音效技术) 由Intel于2004年所提出的音效技术,能够展现高清晰度的音质效果,且能够进行多声道的播放,在音质上超越过去的其他整合型音效编解码器,如Audio Codec 97。当前HDA技术已经普遍被各大芯片厂商采用,诸如intel、realtek、各类HDMI和conexant等都使用了这项技术,除了realtek、intel等厂商修复,我们这些外部任务目前能够对音频问题进行修复的内容也大都在ALSA的pci/hda框架之下。每一个激活的Stream都必须连接到一个DMA引擎上,DMA类型随设备类型被决定。 配置引脚寄存器需要配合声卡芯片的datasheet中的Pin Assignments和Pin Descriptions详细进行配置。 例如ALC256: 配置引脚寄存器能够修复诸如系统无输入输出设备、耳机插入不识别、耳机/话筒无法录音、耳机/扬声器输出无响应。但是噪音问题很难或很少能够通过配置Pin解决。 四、Linux中的音频codec的配置在Linux中,系统的/dev/snd/目录记录着当前系统正在使用的音频设备的设备文件,如下: HDA实现中,在系统中预留了系统配置接口,即/sys/class/sound/hwCxDy,如下: 其中各个接口的说明参考下表: 序号 接口 说明 1 name codec的名称,可以直接写入新字符串进行修改 2 init_verbs 初始化时需要额外执行的verbs,添加需要的verbs到这个文件,可以在 初始化时被执行。 3 hints 给codec的暗示,例如写入jack_detect = no 就会禁止掉codec的jack dectection功能。 4 init_pin_configs 记录BIOS设置的initial pin default config。 5 driver_pin_configs 记录codec修改掉pin default config值的部分。 6 usr_pin_configs 写入自己设定的配置可以覆盖掉BIOS启动时的设置。 7 reconfig 触发codec重新配置,一旦往这个文件写入任意值,驱动就会re-initialize the codec tree again 而我们音频中大多数的修复补丁,都是在修改driver_pin_configs这个配置,以此来让我们的机器搭载的音频设备表现的更好。例如,以下这个修复提交,就是将 driver_pin_configs值配置为0x18, 0x01a110f0 这个修复补丁的配置的主要有两种方法: 一、确认自己当前机器搭载的声卡型号,看根据当前社区主线代码中是否已经修复,或者有没有相同的机器或者芯片型号的配置修改,如果有,我们可以试一试已经有的配置程序是否在我们的环境中也表现良好,如下示例,就是用已有的修复配置,修复本地机器的音频问题: 二、当自己的机器搭载的声卡,当前社区主线代码中已经修复,或者相同的机器或者芯片型号的配置修改,我们尝试已经有的配置程序在我们的环境中也表现不佳,那我们就要自己去配置适合自己本地机器的声卡的修复程序。 而如何配置就需要配合第三章节中提及的HDA配置说明进行配置,我们可以借助alsa-tools-gui提供的hdajackretask命令进行可视化的配置修改验证。 直至我们找到了可以使用的配置,然后根HDA配置项最终写入driver_pin_configs中。 三、此外,系统层也可以进行配置,最终影响usr_pin_configs的配置,优先级高于init_pin_configs和driver_pin_configs。而当前alsa推出和持续优化的alsa-ucm-conf包,也是集中在优化在系统层进行音频配置优化。 当前GitHub - alsa-project/alsa-ucm-conf: ALSA Use Case Manager configuration这个社区也十分活跃,它是使用了json语法来进行配置相关音频设备的配置的,感兴趣的可以研究一下 除了音频输入输出设备缺失、音频输入输出无响应、耳机mic无响应等直接影响使用的致命问题外,其实音频的输入噪音问题也很常见,但是音频的噪音问题往往要么是硬件或者环境影响,或者即使是能够通过软件优化进行修复,但是不了解声卡芯片的内核设计和主板电路情况,一般的开发者很难修复。下面让我们了解下,噪音问题的主要表现和可能的原因: 1.嗡声:即所谓的变压器声,来源复杂 器件工艺设计不合理连接线缆的屏蔽能力不足供电电压过低导致的内部电路工作不正常2.噗声:所谓的火花声 器件内部积累灰尘过多元器件损耗,超过使用寿命3.流水声:高频自激现象 电路设计不良,属于质量问题4.啸叫声、汽船声:低频自激现象 关闭电源,检查器件之间的连接性是否完好5.偶尔的杂声:交流供电线路的串扰 6.广播声:容易引起高频自激,严重时导致喇叭或者耳机烧毁 电路设计不良放大器的开环频响很差非线性失真严重没有进行适当的处理音频噪音问题最常见的是电流噪音,而电流噪音问题的出现,除了硬件本身设计缺陷外,通常是由于音频滤波器没有处理好音频输入的频率范围,导致将一些本不该被拾音或放大的音频信号录入或放大导致,而电流处理往往需要搭配滤波器进行拾音频率范围调整来分析调制(这需要熟悉滤波器原理,并搭配声卡芯片电路图,对内核开发者而言是一个新的领域和调试手段,因此此类问题往往很难解决) 参考链接:https://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification.pdf |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |